﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "LinkedList.h"

void recurseFunc(int a)
{
	if (a == 1)
	{
		printf("2.递归函数的出口：a = %d\n", a);
		//1.中断函数很重要，即递归函数的出口；递归函数的结束条件，结束递归；
		return;
	}
	recurseFunc(a - 1);
	printf("3.递归函数开始递归了，此时a = %d\n", a);
}
int number = 0;
void reversePrint(char* p)
{
	++number;

	//5.首先要确定递归函数的退出条件；
	if (*p == '\0')
	{
		return;
	}

	reversePrint(p + 1);
	printf("6.递归逆序输出字符串的字符：%c\n", *p);
}
//9.链表的逆序打印输出；
void reverseLinkedList(struct LinkedNode* pCurrent)
{
	if (NULL == pCurrent)
	{
		return;
	}

	reverseLinkedList(pCurrent->next);
	printf("12.链表逆序后，输出链表元素：%d\n", pCurrent->data);
}
//15.递归输出8793这个数的个位，十位，百位，千位，万位；
void recurseNum(int val)
{
	if (val == 0)
	{
		return;
	}
	int ret = val / 10;
	recurseNum(ret);
	printf("16.递归正序输出8793的每个位数上的数：%d\n", val % 10);
}

//main219：递归函数调用
int main219()
{
	recurseFunc(3);//1,2,3
	printf("4.main函数执行完毕，即递归函数执行完毕！\n");

	char* s = "abcdefg";
	reversePrint(s);//gfedcba
	//8.调用次数为8次，最后一次是退出条件，即*p= '\0'的时候；
	printf("7.输出递归函数reversePrint的调用次数number为：%d\n", number);//8

	//10.初始化链表；
	struct LinkedNode* header = Init_LinkList();//100,200,300,400,500,600,-1

	//13.链表的逆序打印输出；
	reverseLinkedList(header->next);//600,500,400,300,200,100

	//14.遍历正向输出链表；
	Foreach_LinkList(header);//100,200,300,400,500,600

	//11.销毁链表；
	Destroy_LinkList(header);//100,200,300,400,500,600

	recurseNum(8793);//8,7,9,3

	system("pause");
	return EXIT_SUCCESS;
}